<?php
namespace App\Server\Task;

use App\Model\Friend\FriendModel;
use App\Utility\Common;
use App\Model\User\UserModel;
use App\Msg\MsgCode;
use App\Model\Message\MessageBean;

class UserOnlineTask extends AbstractTask
{

    /**
     * 执行任务的内容
     *
     * @param mixed $taskData
     *            任务数据
     * @param int $taskId
     *            执行任务的task编号
     * @param int $fromWorkerId
     *            派发任务的worker进程号
     * @author : evalor <master@evalor.cn>
     */
    function run($taskData, $taskId, $fromWorkerId)
    {
        
        // 需要注意的是task编号并不是绝对唯一
        // 每个worker进程的编号都是从0开始
        // 所以 $fromWorkerId + $taskId 才是绝度唯一的编号
        // !!! 任务完成需要 return 结果
        $list = (new FriendModel())->getFriendUids($taskData['userinfo']['uid']);
        if ($list) {
            foreach ($list as $k => $v) {
                $tofd = (new UserModel())->getFdByUid($v['fuid']);
                $mb = new MessageBean();
                $mb->setFromid($taskData['userinfo']['uid']);
                $mb->setUid($v['fuid']);
                $mb->setType(MessageBean::FRIEND_ONLINE_TYPE);
                $msg = (new Common())->dealMessage(MsgCode::ONLINE_MESSAGE_ACTION, $mb, "上线行为");
                (new Common())->pushMessage($tofd, $msg);
            }
        }
        return $taskId . $fromWorkerId;
    }

    /**
     * 任务执行完的回调
     *
     * @param mixed $result
     *            任务执行完成返回的结果
     * @param int $task_id
     *            执行任务的task编号
     * @author : evalor <master@evalor.cn>
     */
    function finish($result, $task_id)
    {
        // 任务执行完的处理
        echo "finish :" . $result . PHP_EOL;
    }
}